package com.example.codediff.model;

import lombok.Data;
import java.util.ArrayList;
import java.util.List;

/**
 * 调用路径
 * 表示从入口点到变更点的一条完整调用路径
 */
@Data
public class CallPath {
    /**
     * 调用路径上的所有节点，从入口点到变更点
     */
    private List<CallNode> path = new ArrayList<>();

    /**
     * 入口点（通常是Controller或者接口方法）
     */
    private String entryPoint;

    /**
     * 添加一个调用节点到路径中
     */
    public void addNode(CallNode node) {
        path.add(node);
        if (path.size() == 1) {
            // 第一个节点是入口点
            entryPoint = node.getReadableSignature();
        }
    }

    /**
     * 获取路径长度
     */
    public int getLength() {
        return path.size();
    }

    /**
     * 获取变更点（路径的最后一个节点）
     */
    public CallNode getModifiedPoint() {
        return path.isEmpty() ? null : path.get(path.size() - 1);
    }

    /**
     * 克隆当前路径
     */
    public CallPath clone() {
        CallPath newPath = new CallPath();
        newPath.path = new ArrayList<>(this.path);
        newPath.entryPoint = this.entryPoint;
        return newPath;
    }
}
